#import <iostream>
#import <string>
#import <vector>

using namespace std;

#import "GGraphe.h"
#import "GSommet.h"

template <class G, class S, class A>
	class GGraphe;
template <class G, class S, class A>
	class GSommet;
	
template <class G, class S, class A>
	class GArete
{
private :
	G *graphe;
	S *fstSommet;
	S *sndSommet;
	string nom;
public :
	GArete(string, G*, S*, S*);
	virtual ~GArete();
	virtual void deleteArete();
	
	virtual string getNom();
	virtual string toString()=0;
	virtual string toStringComplet();
	
	virtual G * getGraphe();
	
	virtual void setFstSommet(S *);
	virtual S * getFstSommet();
	virtual void setSndSommet(S *);
	virtual S * getSndSommet();
		
	virtual A * self()=0;
};
